package com.shigu.account.api;

import com.shigu.PageResponse;
import com.shigu.account.exception.UtilsAccountException;
import com.shigu.account.vo.AllDutyVo;
import com.shigu.account.vo.BonusVo;
import com.shigu.account.vo.InviteInfoVo;
import com.shigu.exceptions.WapException;
import com.shigu.trade.vo.AppWxPayResponse;

import java.util.List;

/*
 * create by  过儿  2019-06-03
 *
 * 　用户vip 管理服务
 */
public interface VipManagerService {

    /**
     * @description 改变用户vip等级
     *  如果表中不存在信息，则插入一条
     *
     * @author 郭尔
     * @date 2019-06-03 13:40
     */
    void changeUserLevel(Long mallUserId,int level);


    /**
     *
     * @description 用户信息
     * @author 郭尔
     * @date 2019-06-06 10:26
     */
    InviteInfoVo vipInviteInfo(Long mallUserId,String pageUri);

    /**
     *
     * @description 查询用户vip等级对应的权益列表
     * @author 郭尔
     * @date 2019-06-06 12:01
     */
    List<String> vipDuty(int vipLevel,String pageUri);

    /**
     *
     * @description 生成用户邀请码
     * 生成用户邀请码，需要先判断用户权限
     * @author 郭尔
     * @date 2019-06-03 13:40
     */
    String userInviteCode(Long mallUserId) throws WapException;

    /**
     *
     * @description 根据用户邀请码获得用户id
     * @author 郭尔
     * @date 2019-06-03 13:41
     */
    Long codeToUser(String inviteCode);

    /**
     * @description 加载特殊用户自定义邀请码map
     * @author 郭尔
     * @date 2019-11-18 13:06
     */
    void loadCodeMap();

    /**
     * @description 获取用户的分润比率
     * @param pageUri 常量的页面路径，分安卓 ios 和 测试
     * @author 郭尔
     * @date 2019-06-04 15:34
     */
    Double userRate(Long mallUserId,String pageUri);

    /**
     *
     *
     * @description 获取用户vip的商品折扣,直接返回百分制的 即8折返回  80
     * @author 郭尔
     * @date 2019-06-10 13:09
     */
    Integer vipDiscount(Long mallUserId,String pageUri);

    /**
     *
     * @description 分润操作
     *  这里只是查询出用户的相关信息，并不进行金额的操作。
     *  公众号购买是从分享的人开始
     *  app内购买则是买家开始
     * @param mallUserId 分润链最初的app用户的id
     * @param money 分润订单的总金额
     * @param discount 时候
     * @author 郭尔
     * @date 2019-06-05 13:52
     */
    BonusVo distributeMoney(Long mallUserId, Double money,Boolean discount);

    /**
     *
     * @description 获取全部权限信息
     * @author 郭尔
     * @date 2019-06-06 13:43
     */
    PageResponse<AllDutyVo> getAllDutiesInfo(String pageUri);

    /**
     *
     * @description 用户购买vip
     * @author 郭尔
     * @date 2019-06-06 15:10
     */
    AppWxPayResponse wxPayVip(Long mallUserId) throws Exception;

    /**
     *
     * @description 支付成功处理用户数据
     * @author 郭尔
     * @date 2019-06-06 17:00
     */
     void userVipCallback(Boolean success,String outTradeNo) throws WapException;

    /**
     *
     * @description vip相关处理
     * @author 郭尔
     * @date 2019-11-12 12:37
     */
    void setVipBonus(Long mallUserId) throws UtilsAccountException;
}
